[iOS 8/Xcode 6] BotsでCIしよう(4) – 新機能として追加されたTriggersで成功/失敗をチャットツールに通知する
はじめに
Xcode 6からBotsを設定する際にTriggersという項目が追加されました。
Jenkinsなどでは既によく使われていますが、Integrationの前後にスクリプトを挟み込む事ができるようになりました。例えば、ビルド前にパッケージ管理ツールで依存ファイルをダウンロードしたり、いつも使っているチャットツール(APIが用意されていれば)に通知したりTestFligtでβ版のアプリを自動的に配布することができます。
スクリプト内で使える環境変数
一番知りたい情報はどのIntegrationが成功/失敗したかですよね。それとそれに付随したエラーのカウントなどの情報が環境変数として取得できます。(WWDCのビデオから拾ったので、他にもあるかもしれません。どこかに書いてあるんでしょうか。)
- XCS_BOT_NAME:ボット名
- XCS_INTEGRATION_NUMBER:Integration毎にインクリメントされる固有の番号
- XCS_INTEGRATION_RESULT:Integrationの結果
- XCS_TEST_FAILURE_COUNT:UnitTestがFailureになった個数
- XCS_ERROR_COUNT:Build Errorの個数
- XCS_WARNING_COUNT:Warningの個数
- XCS_ANALYZER_WARNING_COUNT:AnalyzerでWarningになった個数
設定
Botの作成時又は編集時に設定可能です。
Report NavigatorのBotのコンテキストメニューか設定ボタンからCreate Bots又はEdit Botsを選択します。
設定のウィザード画面を最後のページまで進むとConfigure bot triggers:画面にたどり着きます。
そこでBefore Integration又はAfter IntegrationのAdd Trigger -> Run Scriptを選択します。するとテキストエリアが出現するので、そこに思いの丈をおもいっきりぶちまけます。いや、スクリプトを書きます。
今回書いたのはChatWork向けのRubyスクリプトです。
#!/usr/bin/env ruby require 'json' require 'net/http' require 'uri' uri = URI.parse("https://api.chatwork.com/v1/rooms/<ルームID>}/messages") body = "[info][title]#{ENV['XCS_BOT_NAME']}より[/title] ##{ENV['XCS_INTEGRATION_NUMBER']}の結果 : #{ENV['XCS_INTEGRATION_RESULT']}[/info]" request = Net::HTTP::Post.new(uri.request_uri, initheader = {'X-ChatWorkToken' => "<APIトークン>"}) query_hash = {"body" => body} request.set_form_data(query_hash) response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') {|http| http.request(request) }
結果の表示
Botの名前、Integration番号、結果の3つが表示されています。これにエラー時のカウントや箇所、バージョン管理システムのコミットコメントが取得出来れば、必要な情報が足りそうです。
まとめ
スクリプトを書けるようになったことでCIツールとしての価値と自由度が大きく向上した結果になりした。さすがにAndroidやサーバーサイドのアプリまで面倒は見てくれませんが、iOSやMacアプリのビルド時にAppleの外の世界との連携が可能になり、より使えるツールに成長しました。
iOSやMac OSを専門でやっている生粋のApple信者な人は導入してみてはいかがでしょうか。